package com.dlyk.utils;

import org.springframework.util.ObjectUtils;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * 缓存查询工具类
 */
public class CacheUtils {

    /**
     * @param cacheSelector  缓存对象
     * @param databaseSelector  数据库对象
     * @param saveCache  消费者对象
     * @return
     * @param <T>
     */
    public static <T> T getCacheData(Supplier<T> cacheSelector, Supplier<T> databaseSelector, Consumer<T> saveCache){
        // 先从redis中获取数据
        T data = cacheSelector.get();
        if (ObjectUtils.isEmpty(data)){
            // 从数据库中获取数据
            data = databaseSelector.get();
            // 如果从数据库拿到数据，则将数据放入redis中
            if (!ObjectUtils.isEmpty(data)){
                saveCache.accept(data);
            }
        }
        return data;
    }
}
